1장. 선형대수

AI 엔지니어링 선수지식 — 1장. 대상: 고등학생·학부 1년차.

1. 선형대수

LLM 의 모든 입출력은 숫자 묶음(벡터)과 숫자 표(행렬)입니다. "강아지" 라는 단어를 컴퓨터가 이해하려면 수백 개의 숫자 묶음으로 바꿔야 하는데, 그 변환·연산·비교가 모두 선형대수입니다.

1.1 벡터 (Vector)

여러 숫자를 순서대로 묶은 묶음입니다. 화살표로도, 숫자 리스트로도 표현할 수 있습니다.

비유 1 — 화살표. "북동쪽으로 5km" 라는 말에는 방향(북동)과 크기(5km)가 함께 담겨 있습니다. 벡터가 정확히 이렇습니다. [3, 4] 는 x로 3, y로 4 간 화살표(길이 5)입니다.

비유 2 — 친구 정보 카드. [키 172, 몸무게 65, 시력 1.2] 는 한 친구를 나타내는 3차원 벡터입니다. 우리는 3차원까지만 그릴 수 있지만, 컴퓨터는 수천 차원도 똑같이 다룹니다.

실생활 예 — 영화 추천. 넷플릭스는 사용자를 [액션 80, 로맨스 30, 코미디 50], 영화를 [액션 90, 로맨스 5, 코미디 20] 으로 저장합니다. 두 벡터의 방향이 비슷하면 추천이 됩니다.

직접 해보기 — 벡터 [3, 4] 의 길이는 각 숫자를 제곱해 더한 뒤(3²+4²=25) 루트를 씌워 √25 = 5 입니다(피타고라스 정리). [6, 8] 은 √100 = 10 으로, 방향은 같고 길이만 2배입니다.

import numpy as np
v = np.array([3, 4])
print(np.linalg.norm(v))      # 5.0  (길이)
print(v / np.linalg.norm(v))  # [0.6 0.8]  (단위벡터)
 y
 4 |        ● (3,4)
 3 |       /:
   |      / :   ← 길이 = √(3²+4²) = 5
 0 +----+---+--- x
   0    3

실무. 추천 시스템은 사용자와 상품을 모두 벡터로 저장합니다. 쿠팡·유튜브·스포티파이의 "추천" 이 곧 벡터 거리 계산입니다.

LLM 연결. 거대 언어모델은 "강아지" 를 768~4096 차원 벡터(임베딩)로 바꿉니다. 비슷한 뜻의 단어는 비슷한 방향을 가지며, EP2(임베딩)·EP4(어텐션)로 발전합니다.

더 깊이3Blue1Brown 벡터편 · Khan Academy

1.2 행렬 (Matrix)

벡터를 여러 줄 쌓은 숫자 표(행 × 열 격자)입니다. 즉 행렬은 벡터의 묶음입니다.

비유 1 — 엑셀 시트. 학생 30명의 [국어, 영어, 수학] 점수는 30행 × 3열 표가 됩니다. 한 행이 한 학생의 점수 벡터죠.

비유 2 — 흑백 사진. 1920×1080 사진은 1080행 × 1920열 행렬(각 칸은 0~255 밝기)입니다. 컴퓨터에게 사진은 곧 행렬입니다.

실생활 예 — 영화관 좌석표. 행(A~J) × 열(1~20) 격자에 예매=1·빈자리=0 을 채우면, "몇 자리 남았나" 는 0 의 개수가 됩니다.

직접 해보기[[90, 85, 100], [70, 95, 80]] 은 행 2개·열 3개라서 shape = (2, 3), "2명 × 3과목" 입니다. 행렬 모양 읽기는 코딩에서 가장 자주 하는 일입니다.

M = np.array([[90, 85, 100], [70, 95, 80]])
print(M.shape)      # (2, 3)
print(M[:, 2])      # [100  80]  (수학 점수 열)

실무. 이미지(픽셀 행렬)·표 데이터·문장(단어 벡터 쌓기)이 전부 행렬입니다. 데이터 분석의 기본 단위죠.

LLM 연결. 문장 "나는 학교에 간다" 는 단어 4개 × 768 차원 = 4×768 행렬이 됩니다. 모델 가중치도 전부 거대 행렬입니다.

더 깊이Khan Academy: Matrices

1.3 내적 (Dot Product)

두 벡터를 같은 자리끼리 곱해 모두 더한 하나의 숫자입니다. "두 벡터가 얼마나 같은 방향인가" 를 나타내는 점수죠.

비유 1 — 취향 궁합.[액션5, 로맨스1, 코미디4] 와 친구 [액션4, 로맨스2, 코미디5] 는 둘 다 액션·코미디가 높아 내적 값이 큽니다 = 궁합이 좋다는 뜻입니다.

비유 2 — 손전등과 벽. 정면으로 비추면 밝고(내적 큼), 비스듬하면 어둡고(작음), 90도 옆이면 안 닿습니다(내적 0 = 직각).

직접 해보기[5, 1, 4] · [4, 2, 5] = (5×4)+(1×2)+(4×5) = 20+2+20 = 42. 연습으로 [2, 3] · [4, 1] = 2×4 + 3×1 = 11.

a = np.array([5, 1, 4]); b = np.array([4, 2, 5])
print(np.dot(a, b))   # 42
print(a @ b)          # 42  (@ 도 내적)

실무. 검색 엔진은 "검색어 벡터 · 문서 벡터" 의 내적으로 관련도 점수를 매겨 랭킹합니다. 값이 클수록 위에 노출되죠.

LLM 연결. 어텐션의 핵심이 내적입니다. "이 단어가 저 단어에 얼마나 주목하나" 를 두 단어 벡터의 내적으로 계산합니다(EP4·EP5). 내적을 알면 어텐션은 그냥 곱하고 더하기입니다.

더 깊이3Blue1Brown 내적편

1.4 코사인 유사도 (Cosine Similarity)

두 벡터의 각도만으로 비슷함을 재는 값(-1~1)입니다. 크기는 무시하고 방향만 봅니다.

비유 — 같은 곳 보기. 두 사람이 같은 방향(0도)이면 1, 직각(90도)이면 0, 정반대(180도)면 -1입니다.

왜 내적 대신 쓰나. 내적은 크기에 휘둘립니다(긴 문서일수록 무조건 큼). 코사인은 길이를 1로 맞춰 순수 방향만 비교하므로, 길이가 다른 문서끼리도 공정하게 비교할 수 있습니다.

직접 해보기[1, 0][2, 0] 은 둘 다 오른쪽을 향하니(각도 0) 코사인 = 1. [1, 0][0, 1] 은 직각(90도)이라 0 입니다.

from numpy.linalg import norm
a = np.array([5, 1, 4]); b = np.array([4, 2, 5])
print(round(a @ b / (norm(a) * norm(b)), 3))   # 0.949

실무. 스포티파이 "비슷한 곡", 벡터DB(Pinecone·Chroma)의 "유사 문서 검색" 이 전부 코사인 유사도입니다. 인기곡이든 신곡이든 분위기 방향이 같으면 추천되죠.

LLM 연결. RAG(검색증강생성, EP2)에서 "내 질문과 가장 비슷한 문서 찾기" 가 코사인 유사도입니다. 수백만 문서 중 방향이 가장 가까운 것을 즉시 검색합니다.

더 깊이Khan Academy

1.5 행렬 곱 (Matrix Multiplication)

행렬끼리 곱해 새로운 표로 변환하는 연산입니다. 내적을 여러 번 한꺼번에 하는 것이죠.

비유 — 변환 기계. 행렬 곱은 입력을 넣으면 모양이 바뀌어 나오는 기계입니다. "한국어 벡터 → 영어 의미 벡터" 변환기 자체가 행렬이고, 적용이 행렬 곱입니다.

직접 해보기 — 결과의 한 칸만 보면, [[1,2],[3,4]] × [[5,6],[7,8]] 의 [0,0] 칸은 1행 [1,2] 과 1열 [5,7] 의 내적 = (1×5)+(2×7) = 19 입니다. 즉 행렬 곱은 행과 열의 내적을 칸마다 반복하는 것입니다.

A = np.array([[1, 2], [3, 4]]); B = np.array([[5, 6], [7, 8]])
print(A @ B)   # [[19 22] [43 50]]

실무. 신경망의 모든 층이 "입력 × 가중치 행렬" 입니다. 답변 1개에 수천 번의 행렬 곱이 일어나며, GPU 가 AI 에 필수인 이유가 바로 행렬 곱을 초고속 병렬로 하기 때문입니다(EP1 인프라).

LLM 연결. Transformer 한 층은 여러 행렬 곱입니다. 대형 모델이 "수천억 개 파라미터" 라는 말은 행렬 칸이 수천억 개라는 뜻입니다.

더 깊이3Blue1Brown 행렬 곱편

1.6 고유값·고유벡터 (Eigenvalue·Eigenvector)

어떤 변환(행렬)을 적용해도 방향이 바뀌지 않는 특별한 화살표가 고유벡터, 그 늘어난 배율이 고유값입니다.

비유 — 도는 지구본의 축. 빙글 도는 지구본에서 남극–북극 축만 자리를 바꾸지 않습니다(다른 점은 모두 돕니다). 그 축이 고유벡터로, 변환의 본질적 방향을 알려줍니다.

직접 해보기[[2,0],[0,3]][1,0] 에 곱하면 [2,0] 이 됩니다. 방향은 그대로고 길이만 2배죠. 따라서 [1,0] 은 고유벡터, 2 는 고유값입니다.

A = np.array([[2, 0], [0, 3]])
vals, _ = np.linalg.eig(A)
print(vals)   # [2. 3.]  (고유값)

실무. 초창기 구글 페이지랭크가 거대 링크 행렬의 고유벡터 계산이었습니다. 데이터의 핵심 축을 뽑는 도구(PCA 차원축소)입니다.

LLM 연결. 차원 축소(PCA)·임베딩 분석에 쓰입니다. EP5 의 위치임베딩(RoPE)도 회전 행렬 개념과 닿아 있어, 고유값·회전 직관이 있으면 훨씬 수월합니다.

더 깊이3Blue1Brown 고유값편

1.7 정리

개념 LLM 에서의 역할
벡터 단어·문장의 의미 표현 (임베딩)
행렬 문장 전체·모델 가중치
내적 어텐션 점수 (단어 간 주목도)
코사인 유사도 RAG 문서 검색·벡터DB
행렬 곱 신경망 모든 층 (GPU 가속 대상)
고유값 차원 축소·회전(RoPE 직관)

한 문장으로, LLM 은 글자를 벡터로 바꾸고(임베딩) 행렬 곱으로 섞고 내적으로 서로 주목하게(어텐션) 만드는 거대한 선형대수 계산기입니다.

참고 자료3Blue1Brown Essence of Linear Algebra (한국어 자막, 강력 추천) · Khan Academy Linear Algebra


난이도
에피소드
질문
카드를 로딩 중...
답변

클릭하거나 Space를 눌러 뒤집기

0 / 0
학습 진도 0%
이동   Space 뒤집기   R 셔플